home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include "tk.h"
-
- #if defined(__MWERKS__) || defined(__SC__)
- #include <console.h>
- #endif
-
-
- GLenum doubleBuffer, directRender;
- GLint windW, windH;
-
- char *fileName = 0;
- TK_RGBImageRec *image;
- float point[3];
- float zoom;
- GLint x, y;
-
-
- static void Init(void)
- {
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glDisable(GL_DITHER);
-
- x = 0;
- y = windH;
- zoom = 1.0;
- }
-
- static void Reshape(int width, int height)
- {
-
- windW = (GLint)width;
- windH = (GLint)height;
-
- glViewport(0, 0, windW, windH);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0, windW, 0, windH);
- glMatrixMode(GL_MODELVIEW);
- }
-
- static GLenum Key(int key, GLenum mask)
- {
- switch (key) {
- case TK_ESCAPE:
- tkQuit();
- case TK_Z:
- zoom += 0.05;
- break;
- case TK_z:
- zoom -= 0.05;
- // if (zoom < 0.2) zoom = 0.2;
- break;
- default:
- return GL_FALSE;
- }
- return GL_TRUE;
- }
-
- static GLenum Mouse(int mouseX, int mouseY, GLenum button)
- {
- x = (GLint)mouseX;
- y = (GLint)mouseY;
- return GL_TRUE;
- }
-
- static void Draw(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
-
- point[0] = (windW / 2) - (image->sizeX / 2);
- point[1] = (windH / 2) - (image->sizeY / 2);
- point[2] = 0;
- glRasterPos3fv(point);
-
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glPixelZoom(1.0, 1.0);
- glDrawPixels(image->sizeX, image->sizeY, GL_RGB, GL_UNSIGNED_BYTE,
- image->data);
-
- point[0] = (float)x;
- point[1] = windH - (float)y;
- point[2] = 0.0;
- glRasterPos3fv(point);
-
- glPixelZoom(zoom, zoom);
- glCopyPixels((windW/2)-(image->sizeX/2),
- (windH/2)-(image->sizeY/2),
- image->sizeX, image->sizeY, GL_COLOR);
-
- aglSwapBuffers(aglGetCurrentContext());
- }
-
- static GLenum Args(int argc, char **argv)
- {
- GLint i;
-
- doubleBuffer = GL_TRUE;
- directRender = GL_TRUE;
-
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-sb") == 0)
- {
- doubleBuffer = GL_FALSE;
- }
- else if (strcmp(argv[i], "-db") == 0)
- {
- doubleBuffer = GL_TRUE;
- }
- else if (strcmp(argv[i], "-dr") == 0)
- {
- directRender = GL_TRUE;
- }
- else if (strcmp(argv[i], "-ir") == 0)
- {
- directRender = GL_FALSE;
- }
- else if (strcmp(argv[i], "-f") == 0)
- {
- if (i+1 >= argc || argv[i+1][0] == '-')
- {
- printf("-f (No file name).\n");
- return GL_FALSE;
- }
- else
- {
- fileName = argv[++i];
- }
- }
- else
- {
- printf("%s (Bad option).\n", argv[i]);
- return GL_FALSE;
- }
- }
-
- return GL_TRUE;
- }
-
- void main(int argc, char **argv)
- {
- GLenum type;
-
- #if defined(__MWERKS__) || defined(__SC__)
- argc = ccommand(&argv);
- #endif
-
- if(Args(argc, argv) == GL_FALSE)
- {
- tkQuit();
- }
-
- if(fileName)
- image = tkRGBImageLoad(fileName);
- else
- image = tkRGBImageLoad("1.rgb");
-
- windW = 300;
- windH = 300;
- tkInitPosition(30, 60, windW, windH);
-
- type = TK_RGB;
- type |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
- type |= (directRender) ? TK_DIRECT : TK_INDIRECT;
- tkInitDisplayMode(type);
-
- if(tkInitWindow("Copy Test") == GL_FALSE)
- {
- tkQuit();
- }
-
- Init();
-
- tkExposeFunc(Reshape);
- tkReshapeFunc(Reshape);
- tkKeyDownFunc(Key);
- tkMouseDownFunc(Mouse);
- tkDisplayFunc(Draw);
- tkExec();
- }
-